desarrolloforos / [2015] OGame: Todas las clasificaciones en un tooltip

// ==UserScript==
// @name         [2015] OGame: Todas las clasificaciones en un tooltip
// @author       Capt Katana
// @description  OGame: Todas las clasificaciones en un tooltip que aparece al posar el mouse sobre la opción "Clasiciaciones" en el menú. (Requiere cerrar sesión y volver a iniciar para que haga la primera carga de datos)
// @version      2015.1
// @date         2015-07-27
// @namespace    clasificacion_en_tooltip
// @include      http://*.ogame.*/game/index.php?page=*
// @exclude      http://*.ogame.*/game/index.php?page=empire*
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_listValues
// @grant        GM_deleteValue
// @grant        unsafeWindow
// @grant        GM_getResourceText
// @grant        GM_addStyle
// @grant        GM_xmlhttpRequest
// @grant        GM_getResourceURL
// @require      http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
// ==/UserScript==

window.addEventListener("load", function(e) {
  
  /* básico */
	this.$ = this.jQuery = jQuery.noConflict(true);
	if ( !$ ) {
    return;
  }
  if (!this.GM_getValue || (this.GM_getValue.toString && this.GM_getValue.toString().indexOf("not supported") != -1)) {
		this.GM_getValue = function(key, def){
			return localStorage[key] || def;
		};
		this.GM_setValue = function(key, value){
			return localStorage[key] = value;
		};
		this.GM_deleteValue = function(key){
			return delete localStorage[key];
		};
	}
	var setValue = function(key, value) {
		GM_setValue(key, JSON.stringify(value));
  }
	var getValue = function(key, def) {
		var value = GM_getValue(key);
		if (value === undefined) return def;
		return JSON.parse(value);
	} 
  
  function getMetaContent(mn){
    var m = document.getElementsByTagName('meta');
    for(var i in m){
     if(m[i].name == mn){
       return m[i].content;
     }
    }
    return "";
  }  
  /* !básico */            
  
  function formatNumber(num) {
      return ("" + num).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, function($1) { return $1 + "." });
  }
  
  function getData(_universe, _playerID, _type){
    
    GM_xmlhttpRequest({
      method: "POST",
      url: "http://" + _universe + "/api/highscore.xml?category=1&type=" + _type,  /*  "http://" + universe + "/api/highscore.xml?category=1&type=0"  */
      data: "category=1&type=" + _type,
      headers: {
        "Content-Type": "application/x-www-form-urlencoded"
      },
      
      onload: function(response) {
          if (response.responseText.indexOf(_playerID) > -1) {
            var top = response.responseText.split('id="' + _playerID + '"')[0];
                top = parseInt(top.substring(top.lastIndexOf('<player position="') + 18));
            var puntaje = response.responseText.split('id="' + _playerID + '"')[1];
                puntaje = (puntaje.split('score="')[1]).split('"')[0];
            var clasificacion = formatNumber(top) + ' (' + formatNumber(puntaje) + ')';
            
            if(_type == 3){
              var naves = response.responseText.split('id="' + _playerID + '"')[1];
                  naves = formatNumber((naves.split('ships="')[1]).split('"')[0]);
            }
            
            var key = _universe + _type;
            var keyShips = _universe + 'ships';
            setTimeout((function(){
                GM_setValue(key, clasificacion);
                GM_setValue('timestamp', new Date().toLocaleTimeString());
                if(_type == 3){
                  GM_setValue(keyShips, naves);
                }
                updateData(universe);
            }),0);
          }    
      }
    });  

  }
  
  function updateData(_universe) {
    var timestamp = GM_getValue('timestamp');
    
    var html =  "<u>General</u>:               "+ GM_getValue(_universe + '0')    +"<br />"+
                "<u>Economía</u>:              "+ GM_getValue(_universe + '1')    +"<br />"+
                "<u>Investigación</u>:         "+ GM_getValue(_universe + '2')    +"<br />"+
                "<u>Militar</u>:               "+ GM_getValue(_universe + '3')    +"<br />"+
                "- <u>Naves</u>:               "+ GM_getValue(_universe + 'ships')+"<br />"+
                "- <u>Militar Construidos</u>: "+ GM_getValue(_universe + '5')    +"<br />"+
                "- <u>Militar Destruidos</u>:  "+ GM_getValue(_universe + '6')    +"<br />"+
                "- <u>Militar Perdidos</u>:    "+ GM_getValue(_universe + '4')    +"<br />"+
                "<u>Honor</u>:                 "+ GM_getValue(_universe + '7')    +"<br /><br />" +
                "Actualizado: " + timestamp;
    
    document.getElementById('bar').innerHTML = (document.getElementById('bar').innerHTML).replace('index.php?page=highscore"', 'index.php?page=highscore" title="'+ html +'" class="tooltipCustom" style="color: lime !important;"');        
  }
  
  var universe = getMetaContent("ogame-universe");
  updateData(universe);
  if (document.location.href.indexOf ("overview") > 0 || document.location.href.indexOf ("highscore") > 0){
    var playerID = getMetaContent("ogame-player-id");
    for (var i=0;i<=7;i++){ 
      getData(universe, playerID, i);
    }
  }

}, false);